//
//  RootViewController.m
//  HellowWeex
//
//  Created by 金宝泉 on 17/3/22.
//  Copyright © 2017年 x298017064010. All rights reserved.
//

#import "RootViewController.h"

#import <WeexSDK/WeexSDK.h>

@interface RootViewController ()
@property (nonatomic, strong) WXSDKInstance *instance;
@property (nonatomic, strong) UIView *weexView;
@end

@implementation RootViewController

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [_instance destroyInstance];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    [self render];
    
    // 用于 Debug 刷新页面
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationRefreshInstance:) name:@"RefreshInstance" object:nil];
}

/*
 instance.viewController: 一般情况下，iOS的运行环境都是基于不同viewController的，很多底层操作需要知晓当前所处的viewController对象，因此需要向instance知会当前的viewController。
 
 instance.frame: 根据weex对instance的设计规范，需要渲染中知道最外层body的位置和尺寸。这个frame值的设置，跟最终在回调中获取的view.frame一致。
 
 当然，在很多场景下，仅需要在一个native页面的局部渲染weex区块。很简单，您只需要将instance.frame设置为目标区块的位置尺寸即可。
 
 renderWithURL：常用的渲染方式：其一，直接输入URL（可以是file://或 http(s)://）；其二，sourceCode，即JavaScript源码。options参数，表示开发者可以通过WeexSDK向前端透传的参数，如bundleURL。data参数，表示向weex的模板注入的页面数据，它一般来源于native的数据请求，当然也可以在前端逻辑中完成请求后将数据注入。
 
 _instance.onCreate：weex页面最外层body渲染完成后的回调。在此回调中，weex渲染所得的rootView已确定，可以输出并添加到父容器中。
 
 _instance.renderFinish：和onCreate不同，renderFinish表示所有weex的页面元素都已渲染完毕，整个渲染过程至此结束。
 */
- (void)notificationRefreshInstance:(NSNotification *)notification {
    [_instance destroyInstance];
    [self refreshWeex];
}

- (void)refreshWeex
{
    [self render];
}

- (void)render {
    [_instance destroyInstance];

    _instance = [[WXSDKInstance alloc] init];
    _instance.viewController = self;
    _instance.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height);
    
    __weak typeof(self) weakSelf = self;
    _instance.onCreate = ^(UIView *view) {
        weakSelf.weexView = view;
        [weakSelf.weexView removeFromSuperview];
        [weakSelf.view addSubview:weakSelf.weexView];
    };
    _instance.renderFinish = ^ (UIView *view) {
        //process renderFinish
        [weakSelf.instance fireGlobalEvent:weakSelf.path ? weakSelf.path : @"demo" params:@{@"key":@"value"}];
    };
    _instance.onFailed = ^(NSError *error) {
        //process failure
    };
    _instance.updateFinish = ^(UIView *view) {
        //process renderUpdateFinish
    };
    
    // 1.从服务器下载 JSBundle 文件(这里直接指向本地服务器上的js文件)
//        NSString *url = [NSString stringWithFormat:@"file://%@/todo.weex.js",[NSBundle mainBundle].bundlePath];
    NSString *url = @"http://172.20.12.21:8080/dist/app.weex.js";
    
    [_instance renderWithURL:[NSURL URLWithString:url] options:@{@"bundleUrl":url} data:nil];
}


@end
